package com.jlcloud.core.oauth2.handler;

import lombok.RequiredArgsConstructor;
import com.jlcloud.core.oauth2.props.OAuth2Properties;
import com.jlcloud.core.tool.utils.DigestUtil;
import com.jlcloud.core.tool.utils.SM2Util;

/**
 * JlCloudPasswordHandler
 *
 * @author By: JlCloud <br>
 * @Package: com.jlcloud <br>
 * @CreateTime: 2024-12-03 21:45 <br>
 * @Copyright: 2021 www.jilianjituan.com Inc. All rights reserved. <br>
 * @Caution 注意：本内容仅限于冀联人力集团内部传阅，禁止外泄以及用于其他的商业目的 <br>
 */
@RequiredArgsConstructor
public class OAuth2PasswordHandler implements PasswordHandler {

	private final OAuth2Properties properties;

	/**
	 * 判断密码是否匹配
	 *
	 * @param rawPassword     请求时提交的原密码
	 * @param encodedPassword 数据库加密后的密码
	 * @return boolean
	 */
	@Override
	public boolean matches(String rawPassword, String encodedPassword) {
		// 获取公钥
		String publicKey = properties.getPublicKey();
		// 获取私钥
		String privateKey = properties.getPrivateKey();
		// 解密密码
		String decryptPassword = SM2Util.decrypt(rawPassword, publicKey, privateKey);
		// 二次加密后与数据库加密密码匹配
		return encodedPassword.equals(encode(decryptPassword));
	}

	/**
	 * 加密密码规则
	 *
	 * @param rawPassword 密码
	 * @return 加密后的密码
	 */
	@Override
	public String encode(String rawPassword) {
		return DigestUtil.encrypt(rawPassword);
	}
}
